// config/types.go
package config

// 顶层配置（对应 YAML 根节点）
type Config struct {
	App      AppConfig    `mapstructure:"app"`      // 对应 YAML 的 app 节点
	Server   ServerConfig `mapstructure:"server"`   // 对应 YAML 的 server 节点
	Database DBConfig     `mapstructure:"database"` // 对应 YAML 的 database 节点
	Redis    RedisConfig  `mapstructure:"redis"`    // 对应 YAML 的 redis 节点
	Jwt      JwtConfig    `mapstructure:"jwt"`
}

// AppConfig 应用基础信息（app 节点）
type AppConfig struct {
	Name    string `mapstructure:"name"`    // app.name
	Version string `mapstructure:"version"` // app.version
}

// ServerConfig 服务配置（server 节点）
type ServerConfig struct {
	Host string `mapstructure:"host"` // server.host
	Port int    `mapstructure:"port"` // server.port
	Env  string `mapstructure:"env"`  // server.env
}

// DBConfig 数据库配置（database 节点）
type DBConfig struct {
	Host      string `mapstructure:"host"`       // database.host
	Port      int    `mapstructure:"port"`       // database.port
	User      string `mapstructure:"user"`       // database.user
	Password  string `mapstructure:"password"`   // database.password
	DBName    string `mapstructure:"db_name"`    // database.db_name
	Charset   string `mapstructure:"charset"`    // database.charset
	ParseTime bool   `mapstructure:"parse_time"` // database.parse_time
	Loc       string `mapstructure:"loc"`        // database.loc
}

// RedisConfig 配置
type RedisConfig struct {
	Host         string `mapstructure:"host"`
	Port         int    `mapstructure:"port"`
	Password     string `mapstructure:"password"`
	DB           int    `mapstructure:"db"`
	PoolSize     int    `mapstructure:"pool_size"`
	MinIdleConn  int    `mapstructure:"min_idle_conn"`
	MaxIdleConn  int    `mapstructure:"max_idle_conn"`
	DialTimeout  int    `mapstructure:"dial_timeout"`  // 秒
	ReadTimeout  int    `mapstructure:"read_timeout"`  // 秒
	WriteTimeout int    `mapstructure:"write_timeout"` // 秒
}

// Jwt 校验配置
type JwtConfig struct {
	Secret        string `mapstructure:"secret"`
	RefreshSecret string `mapstructure:"refresh_secret"`
	Timeout       int64  `mapstructure:"timeout"`
}
